package top.kaoshanji.p2ch10b;

import top.kaoshanji.p2ch10b.filters.*;

/**
 * 代码清单-p2ch10b-241页a：适配器模式
 * author kaoshanji
 * ^_^
 * create time 2025/3/10 19:35
 */
public class FilterProcessor {

    public static void main(String[] args) {
        Waveform w = new Waveform();

        // 只有一层皮，实现兼容一下
        Applicator.apply(new FilterAdapter(new LowPass(1.0)), w);
        Applicator.apply(new FilterAdapter(new HighPass(2.0)), w);
        Applicator.apply(new FilterAdapter(new BandPass(3.0, 4.0)), w);

    }

}

// 外面看到的是 Processor，但是，通过构造器传入另外一个接口，去做另外一套逻辑
// 也就可以实现与参数是Processor接口的方法的兼容，具体做的事情，其实与Processor接口没有什么关系
// 中转站、被强制关联在一起
// 类的关系是委托
class FilterAdapter implements Processor {

    Filter filter;

    // 作为一个基类，占个位置
    // 传入不同的子类，具体的表现也不一样
    public FilterAdapter(Filter filter) {
        this.filter = filter;
    }

    @Override
    public String name() {
        return filter.name();
    }

    @Override
    public Waveform process(Object input) {
        return filter.process((Waveform) input);
    }
}
